package com.wdb.config.thread;

import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * 配置异步任务属性类，用于管理异步任务执行器的线程池参数 该类通过注解从外部配置文件获取线程池的相关配置，并提供设置这些配置的方法 使用 @Component 注解表明该类为一个 Spring
 * Bean，以便 Spring 管理其生命周期 使用 @Data 注解提供所有字段的 getter 和 setter 方法
 *
 * @author: wendaobai@qq.com
 * @date: 2024/8/22 星期四 10:03
 */
@Data
@Component
public class AsyncTaskProperties {
  // 线程池的核心线程数
  public static int corePoolSize;

  // 线程池的最大线程数
  public static int maxPoolSize;

  // 空闲线程存活时间，单位为秒
  public static int keepAliveSeconds;

  // 工作队列的容量
  public static int queueCapacity;

  /**
   * 设置线程池的核心线程数 该方法通过 @Value 注解从配置文件中获取配置，并设置类字段
   *
   * @param corePoolSize 线程池的核心线程数配置值
   */
  @Value("${task.pool.core-pool-size}")
  public void setCorePoolSize(int corePoolSize) {
    AsyncTaskProperties.corePoolSize = corePoolSize;
  }

  /**
   * 设置线程池的最大线程数 该方法通过 @Value 注解从配置文件中获取配置，并设置类字段
   *
   * @param maxPoolSize 线程池的最大线程数配置值
   */
  @Value("${task.pool.max-pool-size}")
  public void setMaxPoolSize(int maxPoolSize) {
    AsyncTaskProperties.maxPoolSize = maxPoolSize;
  }

  /**
   * 设置空闲线程存活时间，单位为秒 该方法通过 @Value 注解从配置文件中获取配置，并设置类字段
   *
   * @param keepAliveSeconds 空闲线程存活时间的配置值，单位为秒
   */
  @Value("${task.pool.keep-alive-seconds}")
  public void setKeepAliveSeconds(int keepAliveSeconds) {
    AsyncTaskProperties.keepAliveSeconds = keepAliveSeconds;
  }

  /**
   * 设置工作队列的容量 该方法通过 @Value 注解从配置文件中获取配置，并设置类字段
   *
   * @param queueCapacity 工作队列的容量配置值
   */
  @Value("${task.pool.queue-capacity}")
  public void setQueueCapacity(int queueCapacity) {
    AsyncTaskProperties.queueCapacity = queueCapacity;
  }
}
